﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Autoverwaltung.TUI
{
    public class HerstellerVerwaltung : Ansicht
    {
        public HerstellerVerwaltung(IAnsichtManager manager)
            : base(manager) { }

        public override void ZeigeUeberschrift()
        {
            Console.WriteLine("Hersteller verwalten");
            Console.WriteLine("------------------------------");
        }

        public override void ZeigeMenue()
        {
            Console.WriteLine("\nAnzeigen (a)");
            Console.WriteLine("Neu (b)");
            Console.WriteLine("Bearbeiten (c)");
            Console.WriteLine("Loeschen (l)");
            Console.WriteLine("------------------");
            Console.WriteLine("Zum Hauptmenue (z)");

            var key = this.Manager.EinfacheTastenEingabe();
            this.Manager.ConsoleLeeren();
            switch (key)
            {
                case ConsoleKey.A:
                    this.ZeigeHersteller();
                    break;

                case ConsoleKey.B:
                    this.NeuerHersteller();
                    break;

                case ConsoleKey.C:
                    this.BearbeiteHersteller();
                    break;

                case ConsoleKey.L:
                    this.LoescheHersteller();
                    break;

                case ConsoleKey.Z:
                    this.Manager.WechselAnsicht(Ansichten.Hauptmenue);
                    break;
            }
            Console.WriteLine("\n--------------------------------------------\n\n");
            this.ZeigeMenue();
        }

        private void ZeigeHersteller()
        {
            Model.Hersteller[] hersteller = this.Manager.Fachkonzept.GibHersteller();

            Console.WriteLine("Auflistung aller Hersteller:");
            Console.WriteLine("--------------------------------------------");
            if (hersteller != null && hersteller.Length > 0)
            {
                foreach (Model.Hersteller h in hersteller)
                {
                    this.ZeigeHersteller(h);
                }
            }
            else
            {
                Console.WriteLine("Es wurden keine Hersteller gefunden.");
            }
        }

        private void ZeigeHersteller(Model.Hersteller hersteller)
        {
            Console.WriteLine("ID: " + hersteller.Id + ", " + hersteller.Name);
        }

        private void HerstellerErstellenUndSpeichern(bool isEdit = false, int id = int.MinValue)
        {
            string name = this.Manager.EinfacheTextEingabe("Geben Sie bitte den Namen ein:");

            if (name == "")
            {
                name = null;
            }

            if (this.Manager.JaNeinFrage("Moechten Sie die Aenderungen Speichern?"))
            {
                var hersteller = new Model.Hersteller() { Name = name };
                bool b;
                if (isEdit)
                {
                    b = this.Manager.Fachkonzept.BearbeiteHersteller(id, hersteller);
                }
                else
                {
                    b = this.Manager.Fachkonzept.NeuerHersteller(hersteller);
                }
                if (b)
                {
                    Console.WriteLine("Der Hersteller wurde erfolgreich gespeichert.");
                }
                else
                {
                    Console.WriteLine("Der Hersteller konnte nicht gespeichert werden.");
                }
            }
        }

        private void NeuerHersteller()
        {
            Console.WriteLine("Neuer Hersteller:\n");
            this.HerstellerErstellenUndSpeichern();
        }

        private void BearbeiteHersteller()
        {
            this.ZeigeHersteller();

            Model.Hersteller hersteller = null;
            do
            {
                int id = (int)this.Manager.ZahlenEingabe("Waehlen Sie den zu Hersteller aus, welchen Sie bearbeiten moechen. ID:");
                hersteller = this.Manager.Fachkonzept.GibHersteller(id);
            }
            while (hersteller == null);

            this.Manager.ConsoleLeeren();
            Console.WriteLine("Aktuelle Hersteller Daten:");
            this.ZeigeHersteller(hersteller);

            Console.WriteLine("\nNeue Daten:");
            this.HerstellerErstellenUndSpeichern(true, hersteller.Id);
        }

        private void LoescheHersteller()
        {
            this.ZeigeHersteller();
            int id = (int)this.Manager.ZahlenEingabe("Waehlen Sie den zu loeschenden Hersteller aus. ID:");
            if (this.Manager.JaNeinFrage("Moechten Sie den Hersteller mit der ID: " + id + " wirklich loeschen?"))
            {
                if (this.Manager.Fachkonzept.LoescheHersteller(id))
                {
                    Console.WriteLine("Der Hersteller wurde erfolgreich geloescht.");
                }
                else
                {
                    Console.WriteLine("Der Hersteller konnte nicht gelöscht werden.");
                }
            }
        }
    }
}
